package com.play.ballen.utils

import android.text.TextUtils
import android.util.Log
import com.alibaba.fastjson.JSON
import com.play.ballen.config.KVConst
import com.play.ballen.data.UserBean
import com.play.ballen.event.EventCost
import com.yuven.appframework.util.MMKVUtil
import com.yuven.baselib.component.eventbus.Event
import com.yuven.baselib.component.eventbus.EventBusUtil
import com.yuven.baselib.utils.Logger

/**
 * @author :        Yuven
 * @date :          2022/7/10 2:31 下午
 * @desc :
 */
object UserInfoManager {

    /**
     * 当前登录的用户信息，只有当前用户信息不为空，才算已登录
     */
    private var userInfo: UserBean? = null

    private var token:String?=null

    fun getUserToken(): String? {
        return token
    }

    /**
     * 获取当次打开的用户信息
     */
    fun getUserInfo(): UserBean? {
        if(userInfo==null){
            Log.e("AAA","用户信息为空")
            readUserInfoFromMMKV()
        }
        return userInfo
    }

    /**
     * 判断当前是否已登录
     * @return true 已登录，false 未登录
     */
    fun isLogin(): Boolean {
        return token?.length?:0>0
    }

    /**
     * 从缓存里读取用户信息
     */
    fun readUserInfoFromMMKV() {
        //读取本地缓存用户信息
        this.token= MMKVUtil.decodeString(KVConst.KEY_USER_TOKEN, true)
        val userContent = MMKVUtil.decodeString(KVConst.KEY_USER_INFO, true)
        if (!TextUtils.isEmpty(userContent)){
            this.userInfo =JSON.parseObject("", UserBean::class.java)
        }
        Logger.i("UserInfoManager.readUserInfoFromMMKV cacheUserInfo = ${userContent}")
    }
    fun setToken(token: String) {
        this.token = token
        MMKVUtil.encode(KVConst.KEY_USER_TOKEN, token, true)
    }
    fun setUserInfo(userInfo: UserBean) {
        this.userInfo = userInfo
        MMKVUtil.encode(KVConst.KEY_USER_INFO, JSON.toJSONString(userInfo), true)
    }

    fun setLoginSuccess(){
        EventBusUtil.post(Event.create(EventCost.CODE_LOGIN_SUCCESS, userInfo))
    }

    /**
     * 退出登录 清空本地信息
     */
    fun logout() {
        MMKVUtil.removeKey(KVConst.KEY_USER_TOKEN)
        MMKVUtil.removeKey(KVConst.KEY_USER_INFO)
        userInfo = null
        EventBusUtil.post(Event.create(EventCost.CODE_LOGOUT))
    }

}